package cn.saytime.mapper;

import cn.saytime.domain.IdCard;
import cn.saytime.domain.User;
import java.util.List;

/**
 * @author L
 * @ClassName cn.saytime.mapper.UserMapper
 * @Description
 */
public interface UserMapper {

    /**
     * 保存用户
     * @param user
     * @return
     */
    boolean save(User user);

    /**
     * 保存用户，返回主键，形式1
     * @param user
     */
    int saveReturnPK1(User user);

    /**
     * 保存用户，返回主键，形式2
     * @param user
     */
    int saveReturnPK2(User user);

    /**
     * 批量保存用户
     * @param userList
     */
    int batchSave(List<User> userList);

    /**
     * 批量删除用户
     * @param idList
     */
    int batchDelete(List<Integer> idList);

    /**
     * 删除用户
     * @param id
     * @return
     */
    boolean delete(Long id);

    /**
     * 更新用户
     * @param user
     * @return
     */
    boolean update(User user);

    /**
     * 根据ID查找用户信息
     * @param id
     * @return
     */
    User selectById(Long id);

    /**
     * 用户总数量
     * @return
     */
    int selectCount();

    /**
     * 查找所有用户列表
     * @return
     */
    List<User> selectAll();

    /**
     * 根据ID查询用户，并且查询出身份证，使用嵌套查询
     * @return
     */
    User selectByIdWithIdCard(Long id);

    /**
     * 根据ID查询用户，并且查询出身份证，使用嵌套结果
     * @return
     */
    User selectByIdWithIdCard2(Long id);


    /**
     * 根据ID查询用户，并且查询出该用户所有订单
     * @param id
     * @return
     */
    User selectByIdWithOrder(Long id);

    /**
     * 选择性查找
     * @param user
     * @return
     */
    List<User> selectSelective(User user);

    /**
     * 选择性查找2：有姓名则查找姓名，没有姓名看是否有年龄，有年龄查年龄，都没有默认查18岁以上的
     * @param user
     * @return
     */
    List<User> selectSelective2(User user);

    /**
     * 选择性更新
     * @param user
     * @return
     */
    List<User> updateSelective(User user);

}
